package a51qindian.com.comprehensive.net;

import java.util.List;
import java.util.Map;

import a51qindian.com.comprehensive.model.AddShopResult;
import a51qindian.com.comprehensive.model.AddressInfo;
import a51qindian.com.comprehensive.model.AdvInfo;
import a51qindian.com.comprehensive.model.AgentInfo;
import a51qindian.com.comprehensive.model.ApplyInfo;
import a51qindian.com.comprehensive.model.BaseModel;
import a51qindian.com.comprehensive.model.Commission;
import a51qindian.com.comprehensive.model.CountBaseModel;
import a51qindian.com.comprehensive.model.CouponInfo;
import a51qindian.com.comprehensive.model.DeviceInfo;
import a51qindian.com.comprehensive.model.IncomeBaseModel;
import a51qindian.com.comprehensive.model.RepairInfo;
import a51qindian.com.comprehensive.model.ShopAdvInfo;
import a51qindian.com.comprehensive.model.ShopDetailInfo;
import a51qindian.com.comprehensive.model.ShopDeviceInfo;
import a51qindian.com.comprehensive.model.ShopInfo;
import a51qindian.com.comprehensive.model.ShopVerifyInfo;
import a51qindian.com.comprehensive.model.StaffInfo;
import a51qindian.com.comprehensive.model.TaskInstall;
import a51qindian.com.comprehensive.model.TaskRepairInfo;
import a51qindian.com.comprehensive.model.UserDetailInfo;
import a51qindian.com.comprehensive.model.UserInfo;
import a51qindian.com.comprehensive.model.WithDrawInfo;
import a51qindian.com.comprehensive.model.Withdraw;
import io.reactivex.Observable;
import okhttp3.MultipartBody;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

/**
 * Author: Li
 * Date: 2017/9/18 0018
 * Description: 数据请求接口
 */

public interface Service {


    /**
     * 登录
     *
     * @param map 请求参数
     * @return 用户信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_LOGIN)
    Observable<BaseModel<UserInfo>> login(@FieldMap Map<String, String> map);

    /**
     * 获取用户信息详情
     *
     * @param map 参数
     * @return 详情
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_USER_INFO)
    Observable<BaseModel<UserDetailInfo>> userDetailInfo(@FieldMap Map<String, String> map);


    /**
     * 获取手机验证码
     *
     * @param map 参数
     * @return 验证信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_PHONE_CODE)
    Observable<String> getPhoneCode(@FieldMap Map<String, String> map);

    /**
     * 重置密码
     *
     * @param map 参数
     * @return 重置信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_RESET_PWD)
    Observable<String> resetPwd(@FieldMap Map<String, String> map);




    /**
     * 上传文件
     *
     * @param file 文件
     * @return 参数
     */
    @Multipart
    @POST(HttpUrl.URL_FILE_UPLOAD)
    Observable<String> uploadFile(@Part MultipartBody.Part file);

    /**
     * 获取分润记录
     *
     * @param map 请求参数
     * @return 提现记录
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_COMMISSION_LOG)
    Observable<IncomeBaseModel<List<Commission>>> commissionLog(@FieldMap Map<String, String> map);
    /**
     * 获取提现记录
     *
     * @param map 请求参数
     * @return 提现记录
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_WITHDRAW_LOG)
    Observable<IncomeBaseModel<List<Withdraw>>> withdrawLog(@FieldMap Map<String, String> map);
    /**
     * 提现申请
     *
     * @param map 参数
     * @return 申请返回值
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_WITHDRAW_APPLY)
    Observable<String> withdrawApply(@FieldMap Map<String, String> map);


    /**
     * 商铺列表
     *
     * @param map 参数
     * @return 城市列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_SHOP_LIST)
    Observable<CountBaseModel<List<ShopInfo>>> shopList(@FieldMap Map<String, String> map);

    /**
     * 商铺详情
     *
     * @param map 参数
     * @return 详情
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_SHOP_DETAIL)
    Observable<BaseModel<ShopDetailInfo>> shopDetail(@FieldMap Map<String, String> map);

    /**
     * 完善商铺信息
     *
     * @param map 参数
     * @return 完善结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_PERFECT_SHOP)
    Observable<String> perfectShop(@FieldMap Map<String, String> map);


    /**
     * 设置分成比例
     *
     * @param map 参数
     * @return 设置结果信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_SHOP_COMMISSION)
    Observable<String> shopCommission(@FieldMap Map<String, String> map);

    /**
     * 城市设备列表
     *
     * @param map 参数
     * @return 列表集合
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_CITY_DEVICE_LIST)
    Observable<String> cityDeviceList(@FieldMap Map<String, String> map);

    /**
     * 设备列表
     *
     * @param map 参数
     * @return 列表集合
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_DEVICE_LIST)
    Observable<CountBaseModel<List<DeviceInfo>>> deviceList(@FieldMap Map<String, String> map);

    /**
     * 添加商铺
     *
     * @param map 参数
     * @return 添加结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_ADD_SHOP)
    Observable<BaseModel<AddShopResult>> addShop(@FieldMap Map<String, String> map);

    /**
     * 删除商铺
     *
     * @param map 参数
     * @return 删除结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_DELETE_SHOP)
    Observable<String> deleteShop(@FieldMap Map<String, String> map);

    /**
     * 员工列表
     *
     * @param map 参数
     * @return 列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_STAFF_LIST)
    Observable<CountBaseModel<List<StaffInfo>>> staffList(@FieldMap Map<String, String> map);

    /**
     * 添加员工
     *
     * @param map 参数
     * @return 添加结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_ADD_STAFF)
    Observable<String> addStaff(@FieldMap Map<String, String> map);

    /**
     * 删除员工
     *
     * @param map 参数
     * @return 删除结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_DELETE_STAFF)
    Observable<String> deleteStaff(@FieldMap Map<String, String> map);

    /**
     * 店铺审核列表
     *
     * @param map 参数
     * @return 列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_SHOP_VERIFY_LIST)
    Observable<BaseModel<List<ShopVerifyInfo>>> shopVerifyList(@FieldMap Map<String, String> map);

    /**
     * 店铺审核
     *
     * @param map 参数
     * @return 列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_SHOP_VERIFY)
    Observable<String> shopVerify(@FieldMap Map<String, String> map);

    /**
     * 申请单列表
     *
     * @param map 参数
     * @return 申请单列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_APPLY_LIST)
    Observable<BaseModel<List<ApplyInfo>>> applyList(@FieldMap Map<String, String> map);

    /**
     * 首装分配
     *
     * @param map 参数
     * @return 分配信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_FIRST_INSTALL)
    Observable<String> firstInstall(@FieldMap Map<String, String> map);

    /**
     * 申请单分配
     *
     * @param map 参数
     * @return 分配信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_APPLY_HANDLE)
    Observable<String> applyHandle(@FieldMap Map<String, String> map);

    /**
     * 维修单列表
     *
     * @param map 参数
     * @return 列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_REPAIR_LIST)
    Observable<BaseModel<List<RepairInfo>>> repairList(@FieldMap Map<String, String> map);

    /**
     * 维修单分配
     *
     * @param map 参数
     * @return 分配结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_REPAIR_HANDLE)
    Observable<String> repairHandle(@FieldMap Map<String, String> map);


    /**
     * 提现审核列表
     *
     * @param map 参数
     * @return 审核列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_WITHDRAW_LIST)
    Observable<BaseModel<List<WithDrawInfo>>> withDrawList(@FieldMap Map<String, String> map);

    /**
     * 提现审核处理
     *
     * @param map 参数
     * @return 处理结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_WITHDRAW_VERIFY)
    Observable<String> withdrawVerify(@FieldMap Map<String, String> map);
    /**
     * 广告列表
     *
     * @param map 参数
     * @return 广告列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_ADV_LIST)
    Observable<BaseModel<List<AdvInfo>>> advList(@FieldMap Map<String, String> map);


    /**
     * 首装+加装 列表
     *
     * @param map 参数
     * @return 列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_TASK_INSTALL)
    Observable<BaseModel<List<TaskInstall>>> taskInstallList(@FieldMap Map<String, String> map);

    /**
     * 接受 首装|加装  任务
     * @param map   参数
     * @return  接受信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_INSTALL_ACCEPT)
    Observable<String> acceptInstallTask(@FieldMap Map<String, String> map);


    /**
     * 完成任务
     * @param map   参数
     * @return  完成结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_INSTALL_DONE)
    Observable<String> doneInstallTask(@FieldMap Map<String, String> map);

    /**
     * 维修任务列表
     *
     * @param map 参数
     * @return 任务列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_TASK_REPAIR)
    Observable<BaseModel<List<TaskRepairInfo>>> taskRepairList(@FieldMap Map<String, String> map);

    /**
     * 维修任务处理
     *
     * @param map 参数
     * @return 任务列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_HANDLE_REPAIR_TASK)
    Observable<String> handleRepairTask(@FieldMap Map<String, String> map);

    /**
     * 商铺获取广告列表
     * @param map   参数
     * @return  列表信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_SHOP_ADV_LIST)
    Observable<BaseModel<List<ShopAdvInfo>>> shopAdvList(@FieldMap Map<String, String> map);

    /**
     * 商铺广告置顶申请
     * @param map   参数
     * @return  置顶信息
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_ADV_APPLY)
    Observable<String> shopAdvApply(@FieldMap Map<String, String> map);


    /**
     * 商铺加装申请
     * @param map   参数
     * @return  申请结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_SHOP_ADD_APPLY)
    Observable<String> shopAddApply(@FieldMap Map<String, String> map);

    /**
     * 设备报修
     * @param map   参数
     * @return  报修结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_DEVICE_REPAIR)
    Observable<String> deviceRepair(@FieldMap Map<String, String> map);

    /**
     * 广告审核
     * @param map   参数
     * @return  审核结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_ADV_VERIFY)
    Observable<String> advVerify(@FieldMap Map<String, String> map);

    /**
     * 修改用户单个信息
     * @param map   参数
     * @return  修改结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_UPDATE_USER_INFO)
    Observable<String> updateUserInfo(@FieldMap Map<String, String> map);

    /**
     * 优惠券列表
     * @param map   参数
     * @return  列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_COUPON_LIST)
    Observable<BaseModel<List<CouponInfo>>> couponList(@FieldMap Map<String, String> map);

    /**
     * 添加优惠券
     * @param map   参数
     * @return  添加结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_ADD_COUPON)
    Observable<String> addCoupon(@FieldMap Map<String, String> map);

    /**
     * 验证优惠券
     * @param map   参数
     * @return  验证结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_VERIFY_COUPON)
    Observable<String> verifyCoupon(@FieldMap Map<String, String> map);

    /**
     * 区代列表
     * @param map  参数
     * @return  区代列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_AGENT_LIST)
    Observable<CountBaseModel<List<AgentInfo>>> agentList(@FieldMap Map<String, String> map);


    /**
     * 添加区代
     * @param map   参数
     * @return  添加结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_ADD_AGENT)
    Observable<String> addAgent(@FieldMap Map<String, String> map);


    /**
     * 市代查看商铺
     * @param map   参数
     * @return  商铺列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_LOOK_SHOP)
    Observable<CountBaseModel<List<ShopInfo>>> lookShop(@FieldMap Map<String, String> map);

    /**
     * 通过商铺查看设备
     * @param map   参数
     * @return  设备列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_SHOP_DEVICE)
    Observable<CountBaseModel<List<ShopDeviceInfo>>> shopDevice(@FieldMap Map<String, String> map);


    /**
     * 删除区代
     * @param map   参数
     * @return  删除结果
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_DELETE_AGENT)
    Observable<String> deleteAgent(@FieldMap Map<String, String> map);


    /**
     * 获取区域列表
     * @param map   参数
     * @return  区域列表
     */
    @FormUrlEncoded
    @POST(HttpUrl.URL_ADDRESS_LIST)
    Observable<BaseModel<List<AddressInfo>>> getAddressList(@FieldMap Map<String, String> map);

}
